Computer systems may comprise multiple processors, large amounts of random access memory (RAM), and multiple hard disk storage devices. Collectively, these devices may be referred to as computer system resources. The system resources may be logically partitioned with a different operating system running in each partition. That is, in a multiple processor system, one or more processors, a portion of the available main memory, and/or one or more of the disk storage devices may operate under a first operating system. The remaining processors, main memory, and/or disk storage devices may operate under a second operating system. While this example describes only two partitions, any number of partitions may be utilized. The operating systems may be multiple instances of the same operating system, or different operating systems, e.g., Linux™ operating in one partition and Windows® operating in a second partition. This may allow the computer system to perform multiple tasks using operating systems best suited for each particular task.
Regardless of the logical partitioning, there may also be shared resources within the computer system. Computer programs or routines stored in the computer's read only memory (ROM) may be one example of shared resource. The various routines embodied in the ROM may perform low-level hardware manipulation. The ROM programs may alternatively be referred to as processor abstraction layer (PAL) and/or system abstraction layer (SAL) routines.
Some of the PAL and SAL routines may not be non-reentrant, i.e., these programs may need to run to completion before starting another instance of the same program in the computer system regardless of which operating system calls the routine. In computer systems implementing a single operating system, the single operating system may be responsible for ensuring that only one instance of non-reentrant PAL and SAL routines execute within the computer system at any one time. Ensuring this type of operation with respect to non-reentrant routines may be known as providing “spinlocks.” That is, a second attempt to invoke a routine while a first instance is still executing may result in blocking or locking the second attempt, requiring the calling program to “spin” in a software loop and attempt to invoke the routine at a later time. In partitioned systems using independent operating systems within each partition, each operating system may be responsible for ensuring non-reentrant access to PAL and SAL routines within its partition; however, the multiple systems may not be aware of each other, thus creating the possibility that there could be multiple calls to non-reentrant PAL or SAL routines from the various partitions. In this circumstance, it is possible that the computer system may experience operational errors, or “crash,” because of the lack of a technique to provide spinlocks between partitions.